package com.aiYouPms.common.util;

import com.aiYouPms.common.model.Menu;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 菜单转换工具类，用于将后端菜单结构转换为前端所需格式
 */
public class MenuConverterUtil {

    /**
     * 将后端菜单列表转换为前端路由格式
     *
     * @param menus 后端菜单列表
     * @return 前端路由格式的菜单列表
     */
    public static List<Map<String, Object>> convertToRoutes(List<Menu> menus) {
        List<Map<String, Object>> routes = new ArrayList<>();
        
        // 构建根菜单
        for (Menu menu : menus) {
            if (menu.getParentId() == 0) {
                Map<String, Object> route = convertMenuToRoute(menu);
                route.put("children", buildChildrenRoutes(menu, menus));
                routes.add(route);
            }
        }
        
        return routes;
    }

    /**
     * 递归构建子路由
     *
     * @param parentMenu 父菜单
     * @param menus      所有菜单
     * @return 子路由列表
     */
    private static List<Map<String, Object>> buildChildrenRoutes(Menu parentMenu, List<Menu> menus) {
        List<Map<String, Object>> childrenRoutes = new ArrayList<>();
        
        for (Menu menu : menus) {
            if (menu.getParentId() != null && menu.getParentId().equals(parentMenu.getId())) {
                Map<String, Object> childRoute = convertMenuToRoute(menu);
                
                // 如果有子菜单，递归构建
                List<Map<String, Object>> grandChildren = buildChildrenRoutes(menu, menus);
                if (!grandChildren.isEmpty()) {
                    childRoute.put("children", grandChildren);
                }
                
                childrenRoutes.add(childRoute);
            }
        }
        
        return childrenRoutes;
    }

    /**
     * 将单个菜单转换为路由格式
     *
     * @param menu 菜单对象
     * @return 路由格式的Map
     */
    private static Map<String, Object> convertMenuToRoute(Menu menu) {
        Map<String, Object> route = new HashMap<>();
        
        // 基本路由属性
        route.put("id", menu.getId());
        route.put("path", menu.getPath() != null ? menu.getPath() : "");
        route.put("name", menu.getMenuName());
        
        // 组件路径
        if (menu.getComponent() != null && !menu.getComponent().isEmpty()) {
            route.put("component", menu.getComponent());
        } else {
            // 根据菜单类型设置默认组件
            if ("M".equals(menu.getMenuType())) { // 目录类型
                route.put("component", "Layout"); // 默认布局组件
            } else if ("C".equals(menu.getMenuType())) { // 菜单类型
                route.put("component", "ParentView"); // 父级视图组件
            }
        }
        
        // 元数据
        Map<String, Object> meta = new HashMap<>();
        meta.put("title", "menus." + (menu.getPerms() != null ? menu.getPerms().replace(":", ".") : menu.getMenuName()));
        meta.put("keepAlive", menu.getIsCache() != null && menu.getIsCache() == 1);
        
        // 权限列表（这里可以根据实际权限标识生成）
        List<Map<String, Object>> authList = new ArrayList<>();
        if ("F".equals(menu.getMenuType())) { // 按钮类型菜单
            // 为按钮类型菜单添加默认权限
            Map<String, Object> addAuth = new HashMap<>();
            addAuth.put("id", menu.getId() * 10 + 1);
            addAuth.put("title", "新增");
            addAuth.put("authMark", "add");
            authList.add(addAuth);
            
            Map<String, Object> editAuth = new HashMap<>();
            editAuth.put("id", menu.getId() * 10 + 2);
            editAuth.put("title", "编辑");
            editAuth.put("authMark", "edit");
            authList.add(editAuth);
        }
        meta.put("authList", authList);
        
        route.put("meta", meta);
        
        return route;
    }
}